package br.com.ava.view.login;

import java.io.IOException;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.context.FacesContext;

import br.com.ava.core.ConstantesMensagens;
import br.com.ava.core.funcionario.Funcionario;
import br.com.ava.core.funcionario.FuncionarioMediator;
import br.com.ava.core.infra.excecao.NegocioException;
import br.com.ava.view.AplicacaoMB;

@ManagedBean
public class LoginMB extends AplicacaoMB {

	private String login;
	private String senha;
	private String perfil;

	@ManagedProperty(value = "#{funcionarioMediator}")
	private FuncionarioMediator funcionarioMediator;

	public LoginMB() {
		super();
		this.perfil = null;
		addDadosLoginSessao(null, null);
	}

	public void confirmar() throws IOException {

		Funcionario funcionario = funcionarioMediator.buscarPorEmailSenha(
				login, senha);
		try {
			if (funcionario != null) {
				addDadosLoginSessao(funcionario, this.perfil);
				FacesContext.getCurrentInstance().getExternalContext()
						.redirect("pages/home/index.jsf");
			} else {
				throw new NegocioException(
						ConstantesMensagens.MSG_ERRO_LOGIN_INCORRETO);
			}
		} catch (NegocioException erro) {
			adicionarMensagemErro(erro.getMensagens());
		}
	}

	private void addDadosLoginSessao(Funcionario funcionario, String perfil) {
		if (funcionario != null) {
			FacesContext.getCurrentInstance().getExternalContext()
					.getSessionMap().put("idFuncionario", funcionario.getId());
		} else {
			FacesContext.getCurrentInstance().getExternalContext()
					.getSessionMap().put("idFuncionario", null);
		}
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap()
				.put("perfil", perfil);
	}

	public void realizarLogout() throws IOException {
		addDadosLoginSessao(null, null);
		FacesContext.getCurrentInstance().getExternalContext()
				.redirect("../../login.jsf");
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public FuncionarioMediator getFuncionarioMediator() {
		return funcionarioMediator;
	}

	public void setFuncionarioMediator(FuncionarioMediator funcionarioMediator) {
		this.funcionarioMediator = funcionarioMediator;
	}

	public String getPerfil() {
		return perfil;
	}

	public void setPerfil(String perfil) {
		this.perfil = perfil;
	}

	@Override
	public String perfilPagina() {
		return "funcionario";
	}
}
